#include "my_link.h"
//创建
my_link* my_make_lb(int num){
    my_link *p=NULL;
    my_link*p=(my_link*)malloc(sizeof(my_link));
    if(NULL==p){
        printf("内存分配失败");
        return NULL;
    }
    p->data=num;
    p->next=NULL;
    return p;
}
//头插
int my_lb_tc(my_link*p,int num){
    if(NULL==p){
        printf("输入为空指针 错误");
        return -1;
    }
    my_link*pnew=NULL;
    pnew=my_make_lb(num);
    pnew->next = p->next;
    p->next = pnew;
    return 0;
}
//打印
int print_list(my_link*p){
    if(NULL==p){
        printf("输入为空指针 错误");
        return -1;
    }
    my_link*ptemp=p->next;
    while(NULL!=ptemp){
        printf("%d", ptemp->data);
        ptemp=ptemp->next;
    }
    printf("\n");
    return 0;
}
//尾插
int my_lb_wc(my_link*p,int num){
    if(NULL==p){
        printf("输入为空指针 错误");
        return -1;
    }
    my_link *ptemp = p;
    while(NULL!=ptemp->next){
        ptemp=ptemp->next;
    }
    my_link*pnew=NULL;
    ptemp->next=pnew;
    return 0;
}
//任意插
int my_lb_ry(my_link*p,int pos,int num){
    if(NULL==p){
        printf("输入为空指针 错误");
        return -1;
    }
    if(pos < 0){
        printf("位置不合理 插入失败\n");
        return -1;
    }
    my_link*ptemp=p;
    int i=0;
    for(i=0;i<pos;i++){
         if(NULL == ptemp->next){
            break;
        }
        ptemp = ptemp->next;
    }
    if(i < pos){
        printf("位置不合理 插入失败\n");
        return -1;
    }
    my_link *pnew = NULL;
    pnew->next = ptemp->next;
    ptemp->next = pnew;
    return 0;
}
//头删
int my_lb_ts(my_link *p){
    if(NULL == p){
        printf("入参为NULL 请检查\n");
        return -1;
    }
    if(NULL == p->next){
        printf("表空 删除失败\n");
        return -1;
    }
    my_link*pdel=p->next;
    p->next = p->next->next;
    free(pdel);
    pdel = NULL;
    return 0;
}
//尾删
int my_lb_ws(my_link*ptail){
    if(NULL == ptail){
        printf("入参为NULL 请检查\n");
        return -1;
    }
    if(NULL == ptail->next){
        printf("表空 删除失败\n");
        return -1;
    }
    my_link*ptemp=ptail;
    while(NULL==ptemp->next->next){
    ptemp=ptemp->next;
    }
    free(ptemp->next);
    ptemp=NULL;
    return 0;
}
//随意删
int my_lb_suibian(my_link*p,int pos){
    if(NULL == p){
        printf("入参为NULL 请检查\n");
        return -1;
    }
    if(NULL == p->next){
        printf("表空 删除失败\n");
        return -1;
    }
    if(pos<0){
        printf("位置不合理 插入失败\n"); 
        return -1;
    }
    my_link*ptemp=p;
    int i=0;
    for(i=0;i<pos;i++){
        if(NULL==ptemp->next){
            printf("位置不合理");
            return -1;
        }
        ptemp=ptemp->next;
    }
    my_link*pdel=ptemp->next;
    ptemp->next=pdel->next;
    free(pdel);
    pdel=NULL;
    return 0;
}










